/**
 * 因为地球不是一个标准的球形，所以这里的距离是存在一定的误差的。
 */
export class CaculateDistance {
  // 地球的半斤
  public static EARTH_RADIUS: number = 6378.137;

  private static rad(d: number): number {
    return d * Math.PI / 180.0;
  }


  /**
   * 根据两点间经纬度坐标（double值），计算两点间距离，单位为米
   */
  public static GetDistance(lat1: number, lng1: number, lat2: number, lng2: number) {
    let rad = this.rad;
    let radLat1 = rad(lat1);
    let radLat2 = rad(lat2);
    let a = radLat1 - radLat2;
    let b = rad(lng1) - rad(lng2);
    let s = 2 * Math.asin(Math.sqrt(
      Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
    s = s * this.EARTH_RADIUS;
    s = (s * 10000) / 10;
    return s;
  }
}
